#ifndef _PROTO_H
#define _PROTO_H
#pragma pack(1)   //可能存在问题
#include "./types.h"  //可能出错 可能得换成 <types.h> 然后将这个放进路径

#define MULTIGROUP "224.2.2.2"   //组播地址
#define RECVPORT "9000" //组播端口
#define CHANNERNO  20  // 总频道数
#define MINCHANNID   1   // 最小的频道号
#define LISTCHANN   0  //传输节目单的频道
#define MAXCHANNID   (MINCHANNID+CHANNERNO-1) //最大的频道号
#define MTU 65535
#define MAX_CHANNEL_MSG (MTU-20-8)
#define MAX_DATA (MAX_CHANNEL_MSG-sizeof(channid_t))  // msg channel 的最大数据长度
#define MSG_LIST_MAX (MTU-20-8)    // list的最大长度
#define MAX_ENTITY (MSG_LIST_MAX-sizeof(channid_t))  // msg entity的最大长度


struct msg_channel_st{
    channid_t channid; //表示不同的频道id  在MINCHANNID 到MAXCHANNID之间
    char data[1];  //在从c99 之后才支持 数组长度为0的写法，即data[0],为了兼容，写成1
    //设置成变长的，更灵活
};

struct msg_list_entity_st{
    channid_t channid;
    uint16_t data_len; // 自述长度，否则不知道当前数据到哪结束，下个数据从哪开始，这里的data_len是频道数据长度
    char desc[1];
};
/*
1 音乐xxx
2 音乐xxx
3 xxx
。。。
LIST 应该是这样的样子，所以应该是一个数组，且长度不固定，每个元素应该有频道号和对应频道的描述
*/
struct msg_list_st{
    channid_t channid; //只能是LISTCHANN
    msg_list_entity_st entity[1];
};




#endif